#pragma once
#include "igraphic.h"

namespace Commands
{
    namespace Core
    {
        class Inspector;
    }

    class AbstractPicture : public IGraphicElement
    {
    public:
        virtual ~AbstractPicture();

        virtual float GetWidth(void) const;
        
        virtual float GetHeight(void) const;
    
        virtual void SetX(const float x);
    
        virtual float GetX(void) const;
    
        virtual void SetY(const float y);
    
        virtual float GetY(void) const;
    
        virtual void SetXY(const float x, const float y);
    
        virtual void SetZOrder(const int order);
    
        virtual int GetZOrder(void) const;
    
        virtual IGraphicElement::Flip GetFlip(void) const;
    
        virtual void SetFlip(const IGraphicElement::Flip flip);
    
        virtual void SetAngle(const float angle);
    
        virtual float GetAngle(void) const;
    
        virtual void SetScale(const float scale);
    
        virtual void SetXScale(const float scale);
    
        virtual float GetXScale(void) const;
    
        virtual void SetYScale(const float scale);
    
        virtual float GetYScale(void) const;
    
        virtual void SetAlpha(const float alpha);
    
        virtual float GetAlpha(void) const;
    
        virtual void SetXAnchor(const float anchor);
    
        virtual float GetXAnchor(void) const;
    
        virtual void SetYAnchor(const float anchor);
    
        virtual float GetYAnchor(void) const;

        void Accept(const Core::Inspector& inspector);
    
    protected:
        AbstractPicture();
    
        float x_coord, y_coord;
        float width, height;
        float angle;
        float x_scale, y_scale;
        float x_anchor, y_anchor;
        int alpha;
        int z_order;
        Flip flip;
    
    private:
        AbstractPicture(const AbstractPicture&);
        AbstractPicture& operator=(const AbstractPicture&);
    };
}//namespace
